const mergeCell = {
  data() {
    return {
      mergeCellColumn: [] // 需要合并的列
    }
  },
  created: function () {},
  methods: {
    /**
     * 执行表格合并的方法
     * @param {*} param0 
     * @returns 
     */
    objectSpanMethod({ row, column }) {
      if (this.mergeCellColumn.includes(column.property)) {
        const rowspan = row[`rowspan_${column.property}`];
        if (rowspan) {
          return { rowspan, colspan: 1 };
        } else {
          return { rowspan: 0, colspan: 0 };
        }
      }
    },
    /**
     * 设置需要行合并的字段（提供尽量少的合并字段）
     * @param {*} tableData：展平后的表格数据
     * @param {*} fieldArr：需要合并的列
     */
    setTableRowSpan(tableData, fieldArr) {
      let lastItem = {};
      this.mergeCellColumn = fieldArr
      fieldArr.forEach((field, index) => {
        for (let i = 0; i < tableData.length; i++) {
          const item = tableData[i];
          const rowSpan = `rowspan_${field}`;
          // 比较属性值是否相等，比较字段确定唯一性
          if (fieldArr.slice(0, index + 1).every(e => lastItem[e] == item[e]) && lastItem[rowSpan]) {
            item[rowSpan] = 0;
            lastItem[rowSpan] += 1;
          } else {
            item[rowSpan] = 1;
            lastItem = item;
          }
        }
      });
    },
  }
}

export default mergeCell